/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package master_server;

/**
 * // 
 * 
 * @author Karen & François & Renaud
 */
//  Code secret à trouver.
public class SecretCode {
    
   private Bille [] sCode; 
   private boolean win;
   private int colors=5;
   private int nbTent;   // nombre de tentatives max
   
  //generation d'un nouveau code 
public SecretCode (int choixBilles, int choixColors) {  
    win=false;
    sCode = new  Bille [choixBilles];
    this.colors=choixColors;
        for  (int i=0;i < choixBilles;i++) {
            sCode[i]=getRandomBille(colors);
        }
}
//                     collones          couleurs        tentatives max   
public SecretCode (int choixBilles, int choixColors, int nbTent) {  
    win=false;
    this.nbTent=nbTent;  // pour la partie connecté
    sCode = new  Bille [choixBilles];
    this.colors=choixColors;
    
        for  (int i=0;i < choixBilles;i++) {
            sCode[i]=getRandomBille(colors);
        }
}

// renvoie une bille Random entre 1 et la valeure contenue dans colors
private Bille getRandomBille (int colors) {
    Bille out= Bille.BLANC;
    char choix = (char)((int)((Math.random()*colors)+1)+48);
    switch(choix){
        case '1' : out = Bille.BLANC;break;
        case '2' : out = Bille.BLEU;break;
        case '3' : out = Bille.JAUNE;break;
        case '4' : out = Bille.NOIR;break;
        case '5' : out = Bille.ORANGE;break;
        case '6' : out = Bille.ROUGE;break;
        case '7' : out = Bille.VERT;break;
        case '8' : out = Bille.VIOLET;break;
     }
    return out;
    
}

// recuperer le code secret
    public Bille[] getCode() {    
        return sCode;
    }
// savoir si le joueur a gagne
    public boolean estGagnant(){
        return win;
    }       
// verifie la combinaison du joueur a celle du serveur
//  donc sCode         
    public Pions verifCombinaison(Bille[] fromClient){ // combinaison du client
       Pions pions = new Pions();
       
       Bille[] combiGagnante=new Bille[sCode.length];
       System.arraycopy(sCode, 0, combiGagnante, 0, sCode.length);
       System.out.println("Verification de la combinaison en cours...");
       //  premiere verification  s'il y a des pions noir couleur ok et place ok
       
       for (int i=0; i < fromClient.length; i++){
           if(fromClient[i] == combiGagnante[i]){
               pions.noirPP();
               combiGagnante[i]=null;
               fromClient[i]=null;
           } 
       }
       
       if (pions.getNoir()==fromClient.length){
           win=true;
       }
       else {    
     // se produit que si ce n'est pas la combinaison gagnante !
     // 
        if (pions.getNoir()!=sCode.length) {
            for (int c=0; c < fromClient.length; c++) {
                    if (fromClient[c]!=null){
                        for (int s=0; s < combiGagnante.length; s++){                   
                            if((fromClient[c] == combiGagnante[s])){
                               pions.blancPP();
                               combiGagnante[s]=null;
                               break;   // à verifier la necessité.....
                              }               
                         }
                    }
               }
         }
       }
       System.out.println(" Verification terminee !");
       System.out.println(" Noirs " +pions.getNoir()+ "Blancs "+pions.getBlanc());
       
      return pions;
  }
    
   public void printScode () {                      // un print de test   
       for (int i=0;i < sCode.length;i++) {      
           System.out.print(sCode[i]+" ");          
       }  
   }

    void reBuildCode() {
        win=false;
        for  (int i=0;i < sCode.length;i++) {
            sCode[i]=getRandomBille(colors);
        }
    }

    public int getNbTent() {
        return nbTent;
    }

    public int getColors() {
        return colors;
    }
    
    public int getColons() {
        return sCode.length;
    }
 
}

